/*
User:LDC
Date:20210404 15:45 pm
出现次数是很关键的东西，因此一定要有数据结构记录每个数字的出现次数。
每个出现次数举个例子:visited[1]=5 那么至少1，1同颜色 2个。1，1同颜色 2个。1，1(这个1是没有出现的)同颜色 2个,即非0的第visited[i]元素的循环中每i+1轮coun+=i+1个。
*/

class Solution {
public:
    int numRabbits(vector<int>& answers) {

int i;
//制作hash表统计i数字的出现频次
int max=0;
for(auto j:answers)
{
    if(j>max)
    {
        max=j;
    }
}
int *visited=new int[max+1];

//初始化表全部为0
for(i=0;i<max+1;i++)
{
    visited[i]=0;
}

int count=0;
//统计i数字的出现频次
for(auto j:answers)
{
    //仅此一个生物在这里先加好
    if(j==0)
    {
        count++;
        continue;
    }
    visited[j]++;
}
//首先要不等于0的才进去，i出现的出现频次每<i+1当成i+1。遍历从从1开始
for(i=1;i<max+1;i++)
{
    //cout<<count<<" ";
    if(visited[i]!=0)
    {
        while(visited[i]>i+1)
        {
            count+=i+1;
            visited[i]-=i+1;
        }
        count+=i+1;
    }

}
return count;
    }
};